home *** CD-ROM | disk | FTP | other *** search
/ 3D Games - Real-time Rend…ng & Software Technology / 3D Games - Real-time Rendering & Software Technology.iso / flysdk / plugin / weapon / gun.cpp next >
Encoding:
C/C++ Source or Header  |  2000-04-10  |  2.2 KB  |  124 lines

  1. #include "..\..\lib\Fly3D.h"
  2. #include "weapon.h"
  3.  
  4. bsp_object *gun::clone()
  5. {
  6.     gun *tmp=new gun;
  7.     *tmp=*this;
  8.     tmp->source=this;
  9.     return tmp;
  10. }
  11.  
  12. int gun::get_custom_param_desc(int i,param_desc *pd)
  13. {
  14.     if (pd!=0)
  15.     switch(i)
  16.     {
  17.         case 0:
  18.             pd->type=TYPE_GUN_PROJECTILE;
  19.             pd->data=&p;
  20.             strcpy(pd->name,"projectile");
  21.             break;
  22.         case 1:
  23.             pd->type='i';
  24.             pd->data=&firecount;
  25.             strcpy(pd->name,"firecount");
  26.             break;
  27.         case 2:
  28.             pd->type=TYPE_SOUND;
  29.             pd->data=&sndfire;
  30.             strcpy(pd->name,"firesound");
  31.             break;
  32.         case 3:
  33.             pd->type='f';
  34.             pd->data=&firevel;
  35.             strcpy(pd->name,"firevel");
  36.             break;
  37.         case 4:
  38.             pd->type='i';
  39.             pd->data=&delay;
  40.             strcpy(pd->name,"delay");
  41.             break;
  42.         case 5:
  43.             pd->type='i';
  44.             pd->data=&firedelay;
  45.             strcpy(pd->name,"firedelay");
  46.             break;
  47.         case 6:
  48.             pd->type='i';
  49.             pd->data=&nfire;
  50.             strcpy(pd->name,"nfire");
  51.             break;
  52.         case 7:
  53.             pd->type='f';
  54.             pd->data=&randomangle;
  55.             strcpy(pd->name,"randomangle");
  56.             break;
  57.         case 8:
  58.             pd->type='i';
  59.             pd->data=&nfirepos;
  60.             strcpy(pd->name,"nfirepos");
  61.             break;
  62.         case 9:
  63.             pd->type='v';
  64.             pd->data=&firepos[0];
  65.             strcpy(pd->name,"firepos0");
  66.             break;
  67.         case 10:
  68.             pd->type='v';
  69.             pd->data=&firepos[1];
  70.             strcpy(pd->name,"firepos1");
  71.             break;
  72.         case 11:
  73.             pd->type='v';
  74.             pd->data=&firepos[2];
  75.             strcpy(pd->name,"firepos2");
  76.             break;
  77.         case 12:
  78.             pd->type='v';
  79.             pd->data=&firepos[3];
  80.             strcpy(pd->name,"firepos3");
  81.             break;
  82.     }
  83.     return 13;
  84. }
  85.  
  86. void gun::fire(bsp_object *obj,int player)
  87. {
  88.     vector v;
  89.     for( int i=0;i<nfirepos;i++ )
  90.         {
  91.         if (randomangle)
  92.             {
  93.             v=obj->Z+obj->X*randomangle*FRAND+obj->Y*randomangle*FRAND;
  94.             v.normalize();
  95.             }
  96.         else v=obj->Z;
  97.         v.negate();
  98.         if (p)
  99.             p->fire(obj->pos+firepos[i]*obj->mat,v,firevel,player);
  100.         if (sndfire)
  101.             sndfire->add_sound_clone(&obj->pos,0);
  102.         }
  103. }
  104.  
  105. int gun::fire_status()
  106. {
  107.     int ret=0;
  108.     if (firecount)
  109.         {
  110.         if (curfire==0)
  111.             firetime=flyengine->cur_time;
  112.         if (curfire<nfire &&
  113.             (flyengine->cur_time-firetime)/firedelay>=curfire)
  114.             {
  115.             curfire++;
  116.             firecount--;
  117.             ret=1;
  118.             }
  119.         if (flyengine->cur_time-firetime>delay)
  120.             curfire=0;
  121.         }
  122.     return ret;
  123. }
  124.